﻿#pragma once
#include <QObject>
#include "unstackplate_data.h"
#include "common_data.h"
#include "systemcfg_data.h"


struct VisualResult {
	int num;	// 当前抓取数量
	Position grabPos; // 抓取位置
	Position jigInSku;
	QString msg;
};

struct VisualParam {
	int jig;	// 夹具编号
	Size sku;	// 物料尺寸
	int taskNum;	// 目标数量
};

struct Picture {
	QString rgbPath;
	QString depthPath;
	QString visPath;
	QString algPath;
};

struct TestAlgParam {
	QString rgbPath;
	QString depthPath;
	QByteArray vis;
	int jig;
	Size sku;
	int taskNum;
};

class Camera;
class AlgorithmVisual;
class UnstackPlate
{
public:
	UnstackPlate(const QString& id);
	~UnstackPlate();

	bool Init(QString &msg);


	// 开始视觉识别
	bool TakeVisualResult(const VisualParam& param, VisualResult& result);

	// 
	Picture GetCurretPicture() { return m_pic; }
	QString GetId() { return m_id; }
	QString GetCameraId() { return m_cameraId; }
	// 测试接口专用
	bool SnapPicture(QString& rgb, QString& depth);

	bool RgbRcognize(const QString& rgb, QString& vis, QByteArray& ans);

	bool Caculate(const TestAlgParam& param, QString& result, QByteArray& imgage);
private:
	// 调用深度学习的接口
	bool PostDeepLearning(const QString& rgb, QByteArray& result);

private:
	QString m_id;
	QString  m_cameraId;
	QMap<int, JigSetting> m_jigMap;

	Camera* m_camera = nullptr;
	AlgorithmVisual* m_alg = nullptr;

	QString m_visPath;
	Picture m_pic = {};
};
